const fs = require('fs')
/**
 * async await Promise的使用
 * async 是让方法变成异步
 * await 是等待异步方法执行完成
 * 注意：await 必须在 async 方法中 才可以使用因为 await 访问本身就会造成程序停止堵塞，所以必须在异步方法中才可以使用。
 */

// async function sayHello() {
//   return 'hello world'
// }
// const result = sayHello()
// console.log(result)

// function getData() {
//   return 'zhangsan'
// }
// async function testAsync() {
//   return 'hello async'
// }
// async function test() {
//   const v1 = getData()
//   const v2 = testAsync()
//   console.log(v1, v2)
// }
// test()

/**
 * async 会将其后的函数（函数表达式或 Lambda）的返回值封装成一个 Promise 对象，而 
 * await 会等待这个 Promise 完成，并将其 resolve 的结果返回出来
 */
// function findData() {
//   return new Promise(resolve => {
//     setTimeout(() => resolve('long_time_value'), 1000)
//   })
// }
// async function test() {
//   const v = await findData()
//   console.log(v)
// }
// test()

const dir = '../nodejs基础'
function getFiles() {
  return new Promise((resolve, reject) => {
      fs.readdir(dir, (error, files) => {
        if (error) {
          reject(error)
        } else {
          resolve(files)
        }
      })
  })
}
async function printFiles() {
  try {
    const files = await getFiles()
    for (let i = 0; i < files.length; i++) {
      const name = files[i]
      fs.stat(`${dir}/${name}`, (err, stats) => {
        if (stats.isFile()) {
          console.log(`${name}:文件`)
        } else if (stats.isDirectory()) {
          console.log(`${name}:目录`)
        }
      })
    }
  } catch (error) {
    console.log(error)
  }
}
printFiles()